{\rtf1\ansi\deff0\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman{\*\falt Thorndale};}{\f1\froman\fprq2\fcharset0 Times New Roman{\*\falt Thorndale};}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Times New Roman;}{\f4\fswiss\fprq2\fcharset0 Arial{\*\falt Albany};}{\f5\fnil\fprq0\fcharset0 Courier New;}{\f6\fmodern\fprq1\fcharset0 Courier New;}{\f7\fnil\fprq2\fcharset0 HG Mincho Light J;}{\f8\fnil\fprq2\fcharset0 Arial Unicode MS;}}
{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
{\stylesheet{\s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\snext1 Default;}
{\s2\sa120\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\sbasedon1\snext2 Text body;}
{\s3\sb240\sa120\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\loch\f4\fs28\lang255\sbasedon1\snext2 Heading;}
{\s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sbasedon1\snext1{\*\soutlvl0} Heading 1;}
{\s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b\sbasedon1\snext1{\*\soutlvl1} Heading 2;}
{\s6\sb240\sa60\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs32\langfe255\ab\loch\f2\fs32\lang255\b\sbasedon1\snext7 Title;}
{\s7\sb240\sa120\keepn\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ai\loch\f4\fs28\lang255\i\sbasedon3\snext2 Subtitle;}
{\*\cs9\cf1\rtlch\af8\afs24\lang255\ltrch\dbch\af7\afs24\langfe255\loch\f0\fs24\lang1031 WW-Absatz-Standardschriftart;}
{\*\cs10\cf1\rtlch\af8\afs24\lang255\ltrch\dbch\af7\afs24\langfe255\loch\f0\fs24\lang1031 WW-Default Paragraph Font;}
}{\*\listtable{\list\listtemplateid1
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551}
{\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid1}
{\list\listtemplateid2
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551}
{\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid2}
{\list\listtemplateid3
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'00.;}{\levelnumbers\'01;}\fi-360\li360}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'01.;}{\levelnumbers\'01;}\fi-283\li567}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'02.;}{\levelnumbers\'01;}\fi-283\li850}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'03.;}{\levelnumbers\'01;}\fi-283\li1134}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'04.;}{\levelnumbers\'01;}\fi-283\li1417}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'05.;}{\levelnumbers\'01;}\fi-283\li1701}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'06.;}{\levelnumbers\'01;}\fi-283\li1984}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'07.;}{\levelnumbers\'01;}\fi-283\li2268}
{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'08.;}{\levelnumbers\'01;}\fi-283\li2551}
{\*\soutlvl{\listlevel\levelnfc0\leveljc0\levelstartat1\levelfollow2{\leveltext \'02\'09.;}{\levelnumbers\'01;}\fi-283\li2835}}\listid3}
}{\listoverridetable{\listoverride\listid1\listoverridecount0\ls0}{\listoverride\listid2\listoverridecount0\ls1}{\listoverride\listid3\listoverridecount0\ls2}}

{\info{\title Controlling video bit rate and video encode quality}{\author Walter H. Whitlock}{\creatim\yr2002\mo4\dy11\hr12\min21}{\operator Walter Whitlock}{\revtim\yr2002\mo12\dy14\hr18\min7}{\printim\yr1601\mo1\dy1\hr0\min0}{\comment StarWriter}{\vern6410}}\deftab720
{\*\pgdsctbl
{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\pgdscnxt0 Default;}}
\paperh15840\paperw12240\margl1440\margr1440\margt1440\margb1440\sectd\sbknone\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
\pard\plain \s6\sb240\sa60\cf0\qc\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs32\langfe255\ab\loch\f2\fs32\lang255\b\sa60\qc {\ltrch\loch\f2 Controlling video bit rate and video encode quality}
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Introduction}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Controlling video bit rate and adjusting or controlling the quality of encoded video are two separate but related functions that the video codec can attempt to manage in order to achieve better quality of service.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Controlling video bit rate}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Every channel has a bit rate limit.  However, in many situations, the channel\rquote s bit rate limit is sufficiently above the codec bit rate requirement that the effects of the limited bit rate can be ignored.  One just assumes, or makes it a requirement, that 
the channel will accept bits for transmission at whatever rate the codec wishes to send them.  This is the default assumption for both audio and video channels in openH323.  }
\par 
\par {\ltrch\loch\f3 When the channel bit rate limit is, in fact, close to or below the codec sending bit rate, the usual consequence is lost or dropped packets.  That is, packets are sent from the source end point but never arrive at the destination end point.  The channel is
 limiting bit rate by dropping packets.  For both audio and video, the effect of dropped packets is to degrade audio or video quality.  Depending on the particular encoding audio codec, the effect of a few dropped packets can range from insignificant and u
nnoticed to very significant with very noticeable degrading of audio quality.  For video, the effect is similar depending on the particular encoding codec.  However, video information is generally not as important for effective communication as audio.  Con
sequently, the effect of dropped video packets can usually be ignored whereas something must be done to minimize dropped audio packets.  }
\par 
\par {\ltrch\loch\f3 Why control the video bit rate if dropped video packets are not especially important?   The problem is that audio and video packets will usually pass through the same router when using an IP based channel.  If this total bit rate exceeds the IP channel bit
 rate limit and the router drops packets, it usually does not distinguish between audio and video packets.  Consequently, audio packets can be dropped because the video bit rate exceeds the router bit rate limit.  Under this condition, the degraded audio q
uality can essentially make the channel unusable for communication.  }
\par 
\par {\ltrch\loch\f3 The solution to this problem is to manage the total bit rate and keep it from exceeding some maximum.  Since video data generally uses a much larger fraction of the IP based channel capacity than audio data, the total bit rate can be managed effectively by
 controlling only the video channel bit rate.  }
\par 
\par {\ltrch\loch\f3 The easiest way to control video channel bit rate is to insert a variable delay between transmitting each packet.  The delay time is calculated to ensure that the next packet will not be transmitted until sufficient time has elapsed that the average bit ra
te (bits in packet / time before next packet is transmitted) does not exceed the bit rate control target for the channel.  This is the approach taken when video bit rate control is enabled in openH323.  The channel is limiting bit rate by inserting additio
nal time for transmission.  Note that if one is clever about it, useful work can still be done during the time interval between packets.  }
\par 
\par {\ltrch\loch\f3 If nothing else is done, the immediate consequence of controlling the video bit rate at less than the channel capacity is a drop in video frame rate.  Depending on how low the target video bit rate has been set, the frame rate could easily drop below 1 fra
me per second.  Users, however, will generally prefer a higher frame rate, even if the video quality is degraded to achieve it.  This leads naturally into the following discussion about reducing video quality in order to gain a faster frame rate.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b\sb240\sa60\keepn {\ltrch\loch\f2 Controlling video encode quality }
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 As discussed previously, the need for controlling video encode quality arises when the video bit rate is limited or controlled in a way other than simply dropping packets.  If there is no video bit rate limit, there really is no need to control video encod
e quality.  The encoder can run at maximum encode quality all the time.  }
\par 
\par {\ltrch\loch\f3 There are three parameters that control video quality in the H261 codec, frame rate of delivered video, background fill rate, and quantization level used during encode (q, varies from 1 to 31).  With a fixed video bit rate, it is not possible to vary these
 three parameters arbitrarily.  Instead, one must find a set of values which results in a video bit rate which both satisfies the target video bit rate requirement and which also maximizes the perceived video quality of the result.  This can be thought of 
as a constrained optimization problem, but note that the solution only applies to one particular frame of video input.  In general, the optimum encoding parameters will change with every video frame.  }
\par 
\par {\ltrch\loch\f3 The OpenH323 H261codec uses the following strategy in attempting to achieve maximum perceived video quality.  This strategy is simple and no doubt can be improved.  Note that this strategy is only active if video bit rate control is active.  }
\par 
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 The video codec measures and keeps track of the average bit rate achieved while transmitting.  This ensures that the codec becomes aware of changes in the actual video bit rate through the channel, no matter what causes these changes.  It could be due to a
ctive bit rate control by the codec or it could be due to some other reason.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 The video codec calculates a target value for frame size in bits per frame based on the user requested video frame rate and the measured average video channel bit rate.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls2 {\ltrch\loch\f3 Before encoding a new frame, the codec calculates the difference between the size of the previous frame and the target frame size.  This difference is used to adjust the encode quality up or down in attempt to achieve the target frame size for the next enc
oded frame.  }
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 
\par {\ltrch\loch\f3 After encoding, the actual frame size will hardly ever be equal to the target frame size.  Transmitting this frame causes a short term variation in the video frame rate.  In summary, the encode strategy}
\par 
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 accepts short term variations in the frame rate of delivered video, }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 adjusts video encode quality in an attempt to keep the frame rate close to a user set target frame rate, }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls1 {\ltrch\loch\f3 does not adjust the background fill rate.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Complications and Open issues}
\par \pard\plain \sb240\sa60\keepn\cf0\f2\lang255\i\b\f3\i\b \s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b {\ltrch\loch\f2 Frame rate control by video grabber}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 The strategy for controlling video encode quality makes the implicit assumption that decreasing the number of bits per frame will result in an increase in the frame rate.  This assumption does not hold true if the frame rate is limited or controlled by som
e other mechanism.  Specifically, the frame rate could be controlled by the video frame grabber.  }
\par 
\par {\ltrch\loch\f3 If the user requested video frame send rate is set higher than the frame rate from the video grabber, the video codec will reduce encode quality in an attempt to decrease the size of each encoded frame and increase the transmitted frame rate.  However, the
 average bit rate achieved while transmitting decreases but the frame rate stays the same (because it is controlled by the video grabber).  The codec again decreases the encode quality, the encoded frame size decreases, the average bit rate decreases some 
more, but the frame rate stays the same.  This process continues until the encode quality cannot be decreased further and poor quality video frames are transmitted at the grabber determined frame rate.  There is plenty of capacity available in the video ch
annel but it is not being used because the codec is measuring and adjusting to a low average channel bit rated due to the control exerted by the video grabber.  }
\par 
\par {\ltrch\loch\f3 The problem can be illustrated by viewing one of the moving test patterns and setting a video send rate above 10 frames per second.  The test pattern generator limits the frame rate to 10 FPS.  }
\par 
\par {\ltrch\loch\f3 The solution is to adjust the way the video codec measures and keeps track of the average bit rate achieved while transmitting so that it ignores any time that passes while the encode thread is blocked by the video grabbing function.  This is done by recor
ding a time stamp before and after the call to grab a video frame (including time to pre-encode the frame) and subtracting the elapsed time from the total time to transmit that frame.  That way, the measured video bit rate measurement is not affected by th
e time spent while blocked.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\lang255\i\b\f3\i\b \s5\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs24\langfe255\ai\ab\loch\f2\fs24\lang255\i\b {\ltrch\loch\f2 Effective averaging time for bit rate control}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 As described earlier, video bit rate control is accomplished by inserting a variable delay between transmission of each video packet.  The delay time is calculated to ensure that the next packet will not be sent until sufficient time has elapsed that the p
acket bit rate (bits in packet / time before next packet is transmitted) does not exceed the bit rate control target for the channel.  This approach effectively controls the average bit rate over the time period required for transmission of one video packe
t, or the packet average bit rate.  The actual bit rate carried by the channel is most likely much higher during the early part of the packet transmission period followed by a zero bit rate for the later part of the transmission period.  }
\par 
\par {\ltrch\loch\f3 For time periods longer that the packet transmission period, the average bit rate will always be equal to or less than the packet average bit rate.  }
\par 
\par {\ltrch\loch\f3 Usually it is desirable to control average bit rate using a time period longer than the packet transmission time.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Implementation details}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 Control variables and default behavior}
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 1.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul targetFrameTimeMs} - contains the target time interval between video frames, in milliseconds, used when video encode quality control is active.  The reciprocal of frame rate is used so that frame rates below 1 frame per second can be requested without requi
ring a floating point data type.  This variable is initialized to 167 ms corresponding to 6 frames per second.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 2.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul bitRateHighLimit} - contains the maximum transmitting bit rate, in kbps where 1 kbps = 1024 bits per second, used when video bit rate control is active.  This variable is initialized to 2048 kbps.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 3.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoBitRateControlModes} - contains the currently active video control modes.  This variable is initialized to none.  Video bit rate control and adaptive video quality control can be enabled or disabled independently.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 4.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQuality} - contains the current video quality parameter which can take values between 1 (best video quality) and 31 (worst quality).  This variable is initialized to 9.  When video encode quality control is active, the value will adjusted between video
QMin and videoQMax by the quality control algorithm.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 5.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQMin} - contains the minimum value allowed for videoQuality.  This variable is initialized to 1.  }
\par \pard\plain {\listtext\pard\plain \li360\ri0\fi-360\cf0\f3\fs20\lang255\f3\fs20 6.}\ilvl0 \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\li360\ri0\fi-360\ls0{\ltrch\loch\f3{\ul videoQMax} - contains the maximum value allowed for videoQuality.  This variable is initialized to 24.  }
\par \pard\plain \sb240\sa60\keepn\cf0\f2\fs28\lang255\b\f3\fs28\b \s4\sb240\sa60\keepn\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs28\langfe255\ab\loch\f2\fs28\lang255\b {\ltrch\loch\f2 Use with ohPhone }
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255 {\ltrch\loch\f3 The following command line switches have either been added to ohphone or are used differently from before: }
\par 
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f5\fs16\lang1033 {\ltrch\loch\f5   --videotxminquality n   : Select video quality lower limit,(def 1). 1(best)<=n<=31}
\par {\ltrch\loch\f5                              A value of 4 works best for NetMeeting}
\par {\ltrch\loch\f5   --videosendfps n        : Target minimum number of video frames sent per sec 0.001<6(def)<30}
\par {\ltrch\loch\f5   --videobitrate n        : Enable bitrate control.   16< 256(def) <2048 kbit/s (net bw)}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f3\fs20\lang1033 
\par {\ltrch\loch\f3 For example, the following command line,}
\par 
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f6\fs16\lang1033 {\ltrch\loch\f6 ohphone -nlttt -o trace.txt --videodevice fake --videoinput 2 --videoreceive sdl --videobitrate 32 --videosize large \endash -videotest}
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f3\fs20\lang1033 
\par {\ltrch\loch\f3 shows a large bouncing squares test pattern with a 32 kbps bit rate limit.  The video quality is degraded  (higher q number) in an attempt to maintain at least 6 video frames per second.  }
\par 
\par {\ltrch\loch\f3 To run ohphone with netmeeting, use the switch command line \ldblquote {\fs16\f5 --videotxminquality n}\rdblquote .  This will ensure that video quality never falls below 4.  Netmeeting has problems displaying video at qualities better (lower) than 4.  }
\par 
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\rtlch\af5\afs20\ltrch\dbch\af5\afs20\loch\f6\fs16\lang1033 {\ltrch\loch\f6 ohphone -fTnl --videodevice 0 --videoreceive sdl {\f5 --videotxminquality n }--videobitrate 320 --videosize large }
\par \pard\plain \s1\cf0\aspalpha\rtlch\af8\afs24\lang255\ltrch\dbch\af3\afs20\langfe255\loch\f3\fs20\lang255\ltrch\loch\fs16 
\par }